
// test_calculator.js

console.log("[*] Frida script for testing calculator started...");

// Java.perform 包装了所有Java相关的操作，确保在正确的时机执行
Java.perform(function() {
    console.log("[*] Inside Java.perform(). Waiting for classes to load...");

    // 目标类：绝大多数显示文本的控件都是TextView或其子类(如EditText)
    // 我们同时Hook这两个，增加成功率
    const targetClasses = ["android.widget.TextView", "android.widget.EditText"];

    targetClasses.forEach(function(className) {
        try {
            const TargetClass = Java.use(className);
            
            // Hook setText方法。它有多个重载，我们选择最常用的一个
            // 它接收一个 CharSequence 类型的参数
            TargetClass.setText.overload('java.lang.CharSequence').implementation = function(text) {
                // 打印原始的文本内容到Frida控制台
                console.log(`[+] Original text in ${className}: "${text.toString()}"`);

                // --- 这是我们的修改逻辑 ---
                // 创建一个新的Java字符串，内容是 "Hooked: " + 原始文本
                var newText = "Hooked: " + text.toString();
                var newJavaString = Java.use("java.lang.String").$new(newText);
                
                console.log(`[*] Modified text to: "${newText}"`);

                // 调用原始的setText方法，并传入我们修改后的字符串
                // 这样计算器才能正常显示内容
                return this.setText(newJavaString);
            };

            console.log(`[*] Successfully hooked ${className}.setText()`);

        } catch (error) {
            console.error(`[!] Failed to hook ${className}: ${error.message}`);
        }
    });
});

//7294 